<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>面向对象的封装与抽象</title>
</head>
<body>
    
</body>
<script>
    /*
        面向对象的封装与抽象
            封装 -- 能够使我们的代码更加的简洁 用更少的代码完成一样的功能
                之前的函数仓库 与 构造函数就是封装的这个原理
            抽象 -- 能够让代码更加的健壮，不会被外界的代码所影响  使用的是闭包等等的特性 
                当然  之后还会有类的一些静态方法 私有属性更加的方便 但是这个抽象方法也要能够明白
    */
    function User(name,age){
        this.name = name
        this.age = age
        this.show=function(){
            console.log(`${this.name}的年龄是${age}`)
        }
    }
    let jimmy = new User('jimmy',22)
    jimmy.show()  //jimmt的年龄是22
    jimmy.name = 'xuexue'
    jimmy.show()  //  外部也可以访问到这个对象的的name

    // 可见 这个就是一个矛盾的地方 有些数据我们不希望能够被外部访问的到  
    // 所以  我们就需要使用抽象的概念  让外界不能够访问的到内部的数据

    function Score(name,mark){
        let data = {name,mark}
        this.show = ()=>{
            console.log(`${data.name}的成绩是${data.mark}`)
        }
    }
    let js = new Score('javascript',80)
    js.name = 'Vue'
    js.show()
</script>
</html>